package com.kingdee.pda.util;

import java.math.BigDecimal;

/**
 * @author ZhuHuaHua
 * @date 2018/12/9 10:28
 */

public class BigDecimalUtil {

    /**
     * 加法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static double add(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        //此处举例使用乘法（注意：必须使用一个新的BigDecimal来获得运算后的值）
        BigDecimal b3 = b1.add(b2);
        return b3.doubleValue();
    }

    /**
     * 减法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static double subtract(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 乘法
     *
     * @param v1
     * @param v2
     * @return
     */
    public static double multiply(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * @param v1    计算数字1
     * @param v2    计算的数字2
     * @param size  保留精度
     * @param model 位数保留处理方式 {@link BigDecimal.ROUND_DOWN}
     * @return
     */
    public static double divide(double v1, double v2, int size, int model) {
        if (v2 == 0) return 0;
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2, size, model).doubleValue();
    }

    /**
     * 默认保留两位，默认四舍五入
     *
     * @param v1 除数
     * @param v2 被除数
     * @return
     */
    public static double divideDefault(double v1, double v2) {
        return divide(v1, v2, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 求绝对值
     *
     * @param v1
     * @param v2
     * @return
     */
    public static double abs(double v1, double v2) {
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        //此处举例使用乘法（注意：必须使用一个新的BigDecimal来获得运算后的值）
        BigDecimal b3 = b1.subtract(b2);
        return b3.abs().doubleValue();
    }

    /**
     * 取整
     *
     * @param d
     * @return
     */
    public static double setScale(double d) {
        BigDecimal value = new BigDecimal(Double.toString(d));
        return value.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}
